From: Ian Jackson Date: Fri, 14 Mar 2014 17:38:38 +0000 (+0000) Subject: libxl: events: libxl__xswait* support @paths X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~5420 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=ffb46d64c37f520fac6574e90e263cb21f145c8d;p=xen.git libxl: events: libxl__xswait* support @paths Special-case paths starting with '@' in libxl__xswait. Attempting to read these from xenstore gives EINVAL. Callers waiting for (say) @releaseDomain will be checking for some condition which can be observed other than by looking at xenstore. Signed-off-by: Ian Jackson Acked-by: Ian Campbell --- v3: New patch in this version of the series. --- diff --git a/tools/libxl/libxl_aoutils.c b/tools/libxl/libxl_aoutils.c index 477717bae7..1c9eb9e7c0 100644 --- a/tools/libxl/libxl_aoutils.c +++ b/tools/libxl/libxl_aoutils.c @@ -69,8 +69,12 @@ void xswait_xswatch_callback(libxl__egc *egc, libxl__ev_xswatch *xsw, int rc; const char *data; - rc = libxl__xs_read_checked(gc, XBT_NULL, xswa->path, &data); - if (rc) { xswait_report_error(egc, xswa, rc); return; } + if (xswa->path[0] == '@') { + data = 0; + } else { + rc = libxl__xs_read_checked(gc, XBT_NULL, xswa->path, &data); + if (rc) { xswait_report_error(egc, xswa, rc); return; } + } xswa->callback(egc, xswa, 0, data); } diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index a208be720e..a82a43d920 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1130,6 +1130,8 @@ typedef struct libxl__xswait_state libxl__xswait_state; * This HAS been logged. * xswait will not continue (but calling libxl__xswait_stop is OK). * + * xswait.path may start with with '@', in which case no read is done + * and the callback will always get data==0. */ typedef void libxl__xswait_callback(libxl__egc *egc, libxl__xswait_state *xswa, int rc, const char *data);